package main

import "fmt"

func main() {
	fmt.Println(A())
	fmt.Println(D(1,2,3))
	//go 中 func也是一中类型
	a:=A;
	fmt.Println(a())
	//匿名函数
	b:=func(){
		fmt.Println("func")
	}
	b()
	t:=1
	fmt.Printf("t: %p\n",&t)
	c:=closepack(t)

	fmt.Println(c(2))
}
func A() (int, int, int) {
	a, b, c := 1, 2, 3
	return a, b, c
}
func B() (a, b, c int) {
	a, b, c = 1, 2, 3
	return
}
func C() (a int, b int) {
	a, b = 1, 2
	return
}
func D(a,b,c int)int  {

	return a
}
//跟java一样，变长参数只能作为参数列表最后一个，golang里变长参数相当于可变长的Slice-->直接传递一个slice引用类型slice / a,b,c等值传递 ->因为传递slice 传递的类似 指针 ，值传递也可以传递指针
func E(a...int)int  {
	return a[1]
}

//闭包 返回一个func 类似java8 的function 之类，lambda表达式/函数式编程 ,参数 值传递进来之后，在之后调用返回的匿名func 使用的就是固定地址的a啦,引用传递
func closepack(a int)func(int)int  {
	fmt.Printf("t: %p\n",&a)
	return func(b int) int {
		fmt.Printf("t: %p\n",&a)
		return a+b
	}
}
